package alejandro.castro.paleta;

import java.awt.Color;

import alejandro.castro.bolita.Bolita;
import alejandro.castro.extras.BloqueComponent;
import alejandro.castro.extras.Liberado;
import alejandro.castro.extras.Pegado;
import alejandro.castro.visual.BlockAppearance;

import com.uqbar.vainilla.DeltaState;

public class Paleta extends BloqueComponent {

	private final int MARGIN_BOTTOM = 20;
	private int width = 100;
	private int height = 30;
	private int wStage;
	private int speed = 200;
	private EstadoMovimientoPaleta estadoMovimiento;
	private double lastX;
	private double lastY;
	
	
	public Paleta(){
		this.setAppearance(new BlockAppearance(width, height, new Color(75, 75, 75), new Color(128, 128, 255)));		
	}
	
	@Override
	public void onSceneActivated() {
		initialize();
		super.onSceneActivated();
	}

	private void initialize() {
		this.setEstadoComportamiento(Pegado.getInstance()); //solo sirve para ver el comportamiento de la paleta pegada
		this.setEstadoComportamiento(Liberado.getInstance());
		this.setEstado(Detenido.getInstance());
		this.wStage = this.getGame().getDisplayWidth();
		this.setX((wStage - width / 2) / 2);
		this.setY(this.getGame().getDisplayHeight() - height - MARGIN_BOTTOM);
	}
	
	public void update(DeltaState deltaState){
		estadoMovimiento.update(this, deltaState);
		this.getEstadoComportamiento().update(this, deltaState);
	}	

	public void corregirPosicionBolita(Bolita bolita) {
		this.getEstadoComportamiento().corregirPosicionCon(bolita, this);		
	}	

	public void corregirPosicionADerecha() {
		if(this.borderRight() > this.getGame().getDisplayWidth()){
			this.setX(this.getGame().getDisplayWidth() - width);
			this.setEstado(Detenido.getInstance());
		}
	}
	
	public void corregirPosicionAIzquierda() {
		if(this.borderLeft() < 0){
			this.setX(0);
			this.setEstado(Detenido.getInstance());
		}
	}
	
	
	public double getHeight() {
		return height;
	}
	public double getWidth() {
		return width;
	}
	public void setEstado(EstadoMovimientoPaleta estadoPaleta) {
		this.estadoMovimiento = estadoPaleta;
	}
	public int getSpeed() {
		return speed;
	}
	public void setSpeed(int speed) {
		this.speed = speed;
	}
	public double getXMovimiento(){
		return this.estadoMovimiento.getIndiceFriccion();
	}

	public void efectoFriccion(Bolita bolita) {
		this.estadoMovimiento.efectoFriccion(bolita);		
	}
	
	public void move(double dx, double dy) {
		this.lastX = this.getX();
		this.lastY = this.getY();
		super.move(dx, dy);
	}
	
	public double lastMoveX() {
		return (this.getX() - lastX);
	}

	public double lastMoveY() {
		return (this.getY() - lastY);
	}

	public void stop() {

		this.setEstado(Detenido.getInstance());	
		this.lastX = getX();
		this.lastY = getY();
		
	}


	
}
